/*-------------------------------------
├   布局                              ┆
└------------------------------------*/

// 盒子宽高
@mixin size($w, $h) {
  width: $w;
  height: $h;
}

// 最小尺寸, 兼容IE6
@mixin min-width($min-w) {
  min-width: $min-w;
  _width: $min-w;
}

@mixin min-height($min-h) {
  min-height: $min-h;
  _height: $min-h;
}

// 内联块级元素, 兼容IE6
@mixin dib {
  display: inline-block;
  *display: inline;
  *zoom: 1;
}

// 固定定位, 兼容IE6
@mixin fixed {
  position: fixed;
  _position: absolute;
  *zoom: 1;
}

// 统一盒模型
@mixin border-box {
  *, *:after, *:before {
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
  }
}

// 文字图片居中
@mixin center-test {
  text-align: center;
}

@mixin center-img {
  display: table-cell;
  vertical-align: middle;
}

// 块级元素水平居中
@mixin center-display {
  display: block;
  margin-left: auto;
  margin-right: auto;
}

// 居中, 不确定尺寸, 不兼容 IE6
@mixin center-auto {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  margin: auto;
}

@mixin center-x {
  position: absolute;
  left: 0;
  right: 0;
  margin-left: auto;
  margin-right: auto;
}

@mixin center-y {
  position: absolute;
  top: 0;
  bottom: 0;
  margin-top: auto;
  margin-bottom: auto;
}

// 居中, 确定尺寸, 兼容 IE6
@mixin center-position($w, $h) {
  @include size($w, $h);
  position: absolute;
  top: 50%;
  left: 50%;
  margin-top: -($w / 2);
  margin-left: -($h / 2);
}

@mixin center-known-x($h, $w) {
  width: $w;
  position: absolute;
  left: 50%;
  margin-left: -($h / 2);
}

@mixin center-known-y($w, $h) {
  height: $h;
  position: absolute;
  top: 50%;
  margin-top: -($w / 2);
}

// 居中, CSS3 平移方式, 兼容性不行
@mixin center-translate {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

// 居中, Flex 方式, 兼容性不行
@mixin center-flex {
  display: flex;
  align-items: center;
  justify-content: center;
}

// 多个子项布局
@mixin list-float($w: 25%) {
  float: left;
  width: $w;
}

@mixin list-inline($w: 25%) {
  @include dib;
  width: $w;
}

@mixin list-flex {
  flex: 1;
}

// 遮罩层, 全屏遮罩、区域遮罩
@mixin over-screen-fixed {
  @include fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
}

@mixin over-screen-absolute {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
}

// 容器宽高比固定
// 100* 1/1 = 100%
// 100* 3/4 = 75%
@mixin fixed-ratio($padding-top: 100%) {
  position: relative;
  width: 100%;
  height: 0;
  padding-top: $padding-top;
  img {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
  }
}

// 扩展点击区域
@mixin extend-click {
  position: relative;
  &:before {
    content: '';
    position: absolute;
    top: -10px;
    left: -10px;
    right: -10px;
    bottom: -10px;
  }
}

// 定宽居中页面布局
@mixin layout-page($width: 1200px) {
  width: $width;
  margin-left: auto;
  margin-right: auto;
}

// 侧边栏
// 主要区域：overflow: hidden; margin-left: xx; margin-right: xx;
@mixin sidebar-left($width) {
  position: absolute;
  top: 0;
  left: 0;
  width: $width;
}

@mixin sidebar-right($width) {
  position: absolute;
  top: 0;
  right: 0;
  width: $width;
}

/*-------------------------------------
├   字体                              ┆
└------------------------------------*/

// 字体大小
@mixin fz($fz) {
  font-size: $fz;
}

// 字体大小与行高
@mixin fz($fz, $lh) {
  font-size: $fz;
  line-height: $lh;
}

// 字体大小、行高、高度
@mixin fz($fz, $h, $lh: $h) {
  font-size: $fz;
  height: $h;
  line-height: $lh;
}

// 行高与高度
@mixin lh($h, $lh: $h) {
  height: $h;
  line-height: $lh;
}

// 字体颜色, 包括链接与非链接
@mixin color($color) {
  color: $color;
}

// 字体颜色 + 自身 Hover
@mixin text-color($color, $hovercolor) {
  color: $color;
  &:hover {
    color: $hovercolor;
  }
}

// 字体颜色 + 链接 Hover
@mixin display-color($acolor, $hovercolor) {
  a {
    color: $color;
    &:hover {
      color: $hovercolor;
    }
  }
}

// 正常字体样式
@mixin normal-font {
  font-weight: normal;
  font-style: normal;
}

// 辅助性文字（灰色）
@mixin assist-font($color: #b0b0b0, $fz: 14px) {
  color: $color;
  font-size: $fz;
}

// 禁止换行, 文本溢出省略号显示 (一行)
@mixin ellipsis {
  white-space: normal;
  word-wrap: break-word;
  word-break: break-all;
  -o-text-overflow: ellipsis;
  -ms-text-overflow: ellipsis;
  text-overflow: ellipsis;
  overflow: hidden;
}

// 文本溢出省略号显示 (多行)
// 只支持 webkit 浏览器, 解决方案：高度 = 行高*行数
// height: 90px; line-height: 30px; -webkit-line-clamp: 3;
@mixin ellipsis-mult($n: 3) {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: $n;
  word-break: break-all;
  -o-text-overflow: ellipsis;
  -ms-text-overflow: ellipsis;
  text-overflow: ellipsis;
  overflow: hidden;
}

// 书写模式：牌匾从右至左水平单行排版效果、文笺从右至左、从上至下排版效果
@mixin retext-x {
  direction: rtl;
  unicode-bidi: bidi-override;
}

@mixin retext-y {
  writing-mode: tb-rl;
  writing-mode: vertical-rl;
}

// 文字透明
@mixin transparent-text {
  font: 0/0 serif;
  text-shadow: none;
  color: transparent;
}

// 文字隐藏（常用于SEO优化）
// <a href="" title="Logo SEO 优化 "><h1 class="logo">xx</h1></a>
@mixin hidden-text {
  text-indent: -9999px;
  overflow: hidden;
  text-align: left;
}

// 文字外发光效果
@mixin glow-text($r: 10px, $color: gold) {
  text-shadow: 0 0 $r $color;
}

/*-------------------------------------
├   图像                              ┆
└------------------------------------*/

// 用 max-width 来防止图片撑破容器
@mixin max-img {
  display: block;
  max-width: 100%;
  height: auto;
}

// 2x 3x 背景图片
@mixin bg-image($url) {
  background-image: url("#{$url} + '2x.png'");
  @media (-webkit-min-device-pixel-ratio: 3), (min-device-pixel-ratio: 3) {
    background-image: url("#{$url} + '3x.png'");
  }
}

// 全屏大图背景
@mixin fullscreen-bg($url) {
  width: 100vw;
  height: 100vh;
  background: url($url) no-repeat 50% 50%;
  background-size: cover;
}

// 滤镜: 将彩色照片显示为黑白照片
@mixin grayscale() {
  filter: grayscale(100%);
  -webkit-filter: grayscale(100%);
  -moz-filter: grayscale(100%);
  -ms-filter: grayscale(100%);
  -o-filter: grayscale(100%);
}

/*-------------------------------------
├   动效                              ┆
└------------------------------------*/

// 链接默认无下划线，hover后有下划线的样式
@mixin hover-link() {
  text-decoration: none;
  &:hover {
    text-decoration: underline;
  }
}

// 将链接变成默认的文字样式
@mixin unstyled-link {
  color: inherit;
  cursor: inherit;
  text-decoration: inherit;
  &:active, &:focus {
    outline: none;
  }
}

// 盒子阴影
// box-shadow: 水平阴影的位置, 垂直阴影的位置, 模糊距离, 阴影的大小, 阴影的颜色, 阴影开始方向（默认是从里往外，设置inset就是从外往里）;
// box-shadow: h-shadow v-shadow blur spread color inset;
@mixin box-shadow {
  box-shadow: 0px 14px 26px 0px rgba(0, 0, 0, 0.1);
}

// 盒子 Hover
@mixin box-hover {
  // box-shadow: 0px 1px 2px 0px rgba(84, 107, 107, .4);
  transition: all .2s linear;
  &:hover {
    box-shadow: 0 15px 30px rgba(0, 0, 0, .1);
    transform: translate3d(0, -2px, 0);
  }
}

@mixin box-hover2 {
  transition: transform .5s ease;
  &:hover {
    transform: translateX(10px);
  }
}

// 三维闪动 bug 处理
@mixin transform-fix {
  -webkit-backface-visibility: hidden;
  -webkit-transform-style: preserve-3d;
}

// Animation
@mixin ani($name, $time: 1s, $ease: ease-in-out, $fillmode: forwards) {
  animation-name: $name;
  animation-duration: $time;
  animation-timing-function: $ease;
  animation-fill-mode: $fillmode;
}

/*-------------------------------------
├   功能                              ┆
└------------------------------------*/

// 浮动, 兼容 IE6
@mixin fl {
  float: left;
  *display: inline;
  _display: inline;
}

@mixin fr {
  float: right;
  *display: inline;
  _display: inline;
}

// 清除浮动
@mixin clearfix {
  *zoom: 1;
  &:after {
    display: block;
    clear: both;
    content: '';
    visibility: hidden;
    height: 0;
  }
}

@mixin clearfix-table {
  *zoom: 1;
  &:before, &:after {
    content: " ";
    display: table;
    clear: both;
  }
}

// 禁止文本被选择
@mixin user-select {
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}

// 隐藏鼠标手势
@mixin hide-cursor {
  cursor: none !important;
}

// 鼠标禁用样式，但仍然可以触发事件
// <input type="text" disabled="disabled">
@mixin disabled {
  cursor: not-allowed;
}

// 禁用元素事件
// 1. 阻止任何点击动作的执行
// 2. 使链接显示为默认光标(cursor:default)
// 3. 阻止触发hover和active状态
// 4. 阻止JavaScript点击事件的触发
@mixin pointer-events {
  pointer-events: none;
}

// 模糊
@mixin blur($blur: 10px) {
  filter: blur($blur);
  -webkit-filter: blur($blur);
  -moz-filter: blur($blur);
  -o-filter: blur($blur);
  -ms-filter: blur($blur);
  filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius='${blur}');
  *zoom: 1;
}

// 透明度, 兼容 IE8
@mixin opacity($opacity: 20) {
  opacity: $opacity / 100;
  filter: alpha(opacity=$opacity);
}

// 用伪类来显示打印时 a 标签的链接
@mixin print-link() {
  @media print {
    a[href]:after {
      content: " (" attr(href) ") ";
    }
  }
}

// 隔行换色
@mixin zebra-lists($color) {
  li:nth-child(odd) {
    background-color: $color;
  }
  li:nth-child(even) {
    background: #0ee6e4;
  }
}

// 首字下沉
@mixin first-letter($font-size: 6em) {
  &::first-letter {
    float: left;
    line-height: 1;
    font-size: $font-size;
  }
}

// 特殊标记段落第一行
@mixin first-line($red: red) {
  &::first-line {
    color: $red;
  }
}

// 美化选中文本
@mixin beauty-select() {
  &::selection {
    color: #fff;
    background-color: #6bc30d;
    text-shadow: none;
  }
}

// 美化占位符 placeholder 样式
@mixin beauty-placeholder($fz, $color: #999, $align: left) {
  &:-moz-placeholder {
    font-size: $fz;
    color: $color;
    text-align: $align;
  }
  &:-ms-input-placeholder {
    font-size: $fz;
    color: $color;
    text-align: $align;
  }
  &::-webkit-input-placeholder {
    font-size: $fz;
    color: $color;
    text-align: $align;
  }
}

// 美化占位符 placeholder 样式（自定义属性和值）
@mixin beauty-placeholder-custom($property, $value) {
  &:-moz-placeholder {
    $property: $value;
  }
  &:-ms-input-placeholder {
    $property: $value;
  }
  &::-webkit-input-placeholder {
    $property: $value;
  }
}

/*-------------------------------------
├   图形                              ┆
└------------------------------------*/

// 三角形
@mixin triangle($width: 4px,$color: #000) {
  display: inline-block;
  width: 0;
  height: 0;
  vertical-align: middle;
  border-top: $width solid $color;
  border-left: $width solid transparent;
  border-right: $width solid transparent;
}

// 三角形箭头气泡效果, IE6-7 无表现
@mixin arrow-top( $w: 10px, $color: red, $x: 50%) {
  position: relative;
  &:before {
    position: absolute;
    bottom: 100%;
    left: $x;
    content: " ";
    height: 0;
    width: 0;
    pointer-events: none;
    border-style: solid;
    border-color: transparent;
    border-bottom-color: $color;
    border-width: $w;
    $margin: -$w;
    margin-left: $margin;
  }
}

@mixin arrow-right($w: 10px, $color: red, $y: 50%) {
  position: relative;
  &:before {
    position: absolute;
    left: 100%;
    top: $y;
    content: " ";
    height: 0;
    width: 0;
    pointer-events: none;
    border-style: solid;
    border-color: transparent;
    border-left-color: $color;
    border-width: $w + 'px';
    $margin: -$w;
    margin-top: $margin + 'px';
  }
}

@mixin arrow-bottom($w: 10px, $color: red, $x: 50%) {
  position: relative;
  &:before {
    position: absolute;
    top: 100%;
    left: $x;
    content: " ";
    height: 0;
    width: 0;
    pointer-events: none;
    border-style: solid;
    border-color: transparent;
    border-top-color: $color;
    border-width: $w + 'px';
    $margin: -$w;
    margin-left: $margin + 'px';
  }
}

@mixin arrow-left($w: 10px, $color: red, $y: 50%) {
  position: relative;
  &:before {
    position: absolute;
    right: 100%;
    top: $y;
    content: " ";
    height: 0;
    width: 0;
    pointer-events: none;
    border-style: solid;
    border-color: transparent;
    border-right-color: $color;
    border-width: $w + 'px';
    $margin: -$w;
    margin-top: $margin + 'px';
  }
}

// 三角形箭头气泡效果, 带边框
@mixin arrow-with-border-top( $w: 10px, $color: red, $border-w: 1px, $border-color: red, $x: 50%) {
  position: relative;
  &:before, &:after {
    bottom: 100%;
    left: $x;
    content: " ";
    height: 0;
    width: 0;
    position: absolute;
    pointer-events: none;
    border-style: solid;
    border-color: transparent;
  }
  &:after {
    border-bottom-color: $color;
    border-width: $w + 'px';
    $margin: -$w;
    margin-left: $margin + 'px';
  }
  &:before {
    border-bottom-color: $border-color;
    $arrbo: $w+$border-w;
    border-width: $arrbo + 'px';
    $margin-bo: -$arrbo;
    margin-left: $margin-bo + 'px';
  }
}

@mixin arrow-with-border-bottom( $w: 10px, $color: red, $border-w: 1px, $border-color: red, $x: 50%) {
  position: relative;
  &:before, &:after {
    top: 100%;
    left: $x;
    content: " ";
    height: 0;
    width: 0;
    position: absolute;
    pointer-events: none;
    border-style: solid;
    border-color: transparent;
  }
  &:after {
    border-top-color: $color;
    border-width: $w + 'px';
    $margin: -$w;
    margin-left: $margin + 'px';
  }
  &:before {
    border-top-color: $border-color;
    $arrbo: $w+$border-w;
    border-width: $arrbo + 'px';
    $margin-bo: -$arrbo;
    margin-left: $margin-bo + 'px';
  }
}

@mixin arrow-with-border-left( $w: 10px, $color: red, $border-w: 1px, $border-color: red, $y: 50%) {
  position: relative;
  &:before, &:after {
    top: $y;
    right: 100%;
    content: " ";
    height: 0;
    width: 0;
    position: absolute;
    pointer-events: none;
    border-style: solid;
    border-color: transparent;
  }
  &:after {
    border-right-color: $color;
    border-width: $w + 'px';
    $margin: -$w;
    margin-top: $margin + 'px';
  }
  &:before {
    border-right-color: $border-color;
    $arrbo: $w+$border-w;
    border-width: $arrbo + 'px';
    $margin-bo: -$arrbo;
    margin-top: $margin-bo + 'px';
  }
}

@mixin arrow-with-border-right( $w: 10px, $color: red, $border-w: 1px, $border-color: red, $y: 50%) {
  position: relative;
  &:before, &:after {
    top: $y;
    left: 100%;
    content: " ";
    height: 0;
    width: 0;
    position: absolute;
    pointer-events: none;
    border-style: solid;
    border-color: transparent;
  }
  &:after {
    border-left-color: $color;
    border-width: $w + 'px';
    $margin: -$w;
    margin-top: $margin + 'px';
  }
  &:before {
    border-left-color: $border-color;
    $arrbo: $w + $border-w;
    border-width: $arrbo + 'px';
    $margin-bo: -$arrbo;
    margin-top: $margin-bo + 'px';
  }
}

/*-------------------------------------
├   组件                              ┆
└------------------------------------*/

// 吸顶导航
@mixin fix-header($h: 80px) {
  @include fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: $h;
  z-index: 1000;
  //background-color: rgba(256, 256, 256, .92);
  //border-bottom: 1px solid rgba(7, 17, 27, 0.1);
  //box-shadow: 0px 0px 20px rgba(0,0,0,0.2);
}

// 吸底导航
@mixin fix-header($h: 80px) {
  @include fixed;
  left: 0;
  bottom: 0;
  width: 100%;
  height: $h;
  z-index: 1000;
}

// 输入框
@mixin input-text {
  display: block;
  width: 100%;
  padding: 4px 8px;
  font-size: 14px;
  line-height: 1.42858;
  color: #333;
  border: 1px solid #ddd;
  background-color: #fff;
  border-radius: 3px;
}

// 分割线
// <span class="separator">|/-</span>
@mixin separator {
  margin: 0 10px;
  color: #999;
  font-size: 14px;
}

// 分割线 / (面包屑导航)
@mixin separator2 {
  &:before {
    padding: 0 5px;
    color: #ccc;
    content: "/\00a0";
  }
}

// <hr class="hr">
// 支付宝：我也是有底线的
@mixin hr {
  height: 1px;
  margin: 10px 0;
  border: 0;
  clear: both;
  background-color: #e2e2e2;
}

// 改装的 fieldset
// <fieldset><legend>返璞归真</legend></fieldset>
@mixin fieldset {
  border-color: #d2d2d2;
  border-width: 1px 0 0;
  border-style: solid;
  legend {
    padding: 0 20px;
    text-align: center;
    font-size: 20px;
    font-weight: 300;
  }
}

// 引用区块（模仿 Layui）
// <div class="blockquote">Lorem ipsum dolor sit amet.</div>
@mixin blockquote() {
  margin-bottom: 10px;
  padding: 15px;
  line-height: 22px;
  border-left: 5px solid #009688;
  border-radius: 0 2px 2px 0;
  background-color: #f2f2f2;
}

// 徽章 (椭圆、小圆点)
// <span class="badge">10</span>
@mixin badge {
  position: relative;
  display: inline-block;
  font-size: 12px;
  color: #fff;
  background-color: #FF5722;
}

@mixin badge-ellipse {
  min-width: 8px;
  height: 18px;
  padding: 2px 6px;
  text-align: center;
  line-height: 18px;
  border-radius: 9px;
}

@mixin badge-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
}

// 关闭按钮
// <button class="close" type="button"><span>&times;</span></button>
@mixin close {
  position: relative;
  -webkit-appearance: none;
  padding: 0;
  cursor: pointer;
  background: 0 0;
  border: 0;
  font-size: 20px;
  font-weight: 700;
  line-height: 1;
  color: #000;
  text-shadow: 0 1px 0 #fff;
  filter: alpha(opacity=20);
  opacity: .2;
  &:hover {
    color: #000;
    text-decoration: none;
    cursor: pointer;
    filter: alpha(opacity=50);
    opacity: .5;
  }
  &:before {
    content: '';
    position: absolute;
    top: -10px;
    left: -10px;
    right: -10px;
    bottom: -10px;
  }
}

// 1 像素边框问题
@mixin onepx {
  position: relative;
  &:after {
    content: '';
    display: block;
    position: absolute;
    left: 0;
    width: 100%;
    border-top: 1px solid rgba(7, 17, 27, 0.1);
    transform: scaleY(0.5);
  }
}

@mixin onepx-top {
  &:after {
    top: 0;
  }
}

@mixin onepx-bottom {
  &:after {
    bottom: 0;
  }
}

@mixin onepx-easy-top($color: #ccc) {
  box-shadow: inset 0px -1px 1px -1px $color;
}

@mixin onepx-easy-bottom($color: #ccc) {
  box-shadow: inset 0px 1px 1px -1px $color;
}